#ifndef DESIGN_PROXY
#define DESIGN_PROXY
#include <string>

namespace proxy{

class GiveGift
{
public:
    virtual void GiveDolls() = 0;
    virtual void GiveFlowers() = 0;
    virtual void GiveChocolate() = 0;
};

class SchoolGirl
{
public:
    SchoolGirl(std::string n):m_name(n){}
public:
    std::string getName(){return this->m_name;}
private:
    std::string m_name;
};

class Pursuit : public GiveGift
{
public:
    Pursuit(SchoolGirl* m);
public:
    virtual void GiveDolls();
    virtual void GiveFlowers();
    virtual void GiveChocolate();
private:
    SchoolGirl* m_mm;
};

class Proxy : public GiveGift
{
public:
    Proxy(SchoolGirl* m);
public:
    virtual void GiveDolls();
    virtual void GiveFlowers();
    virtual void GiveChocolate();
private:
    Pursuit* m_gg;
};
}

#endif // DESIGN_PROXY
